const express = require('express');
const router = express.Router();
// const Data = require('../data/data');
const querystring = require('querystring');
const parseUrl = require('url');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const bcrypt = require('bcrypt');
// console.log(Data);

// 创建连接mysql对象
// const connection = mysql.createConnection({
//     host: 'localhost',
//     user: 'root',
//     password: '2724860101',
//     database: 'mydb',
// })

// 创建连接池
const pool = mysql.createPool({
    connectionLimit: 0,
    host: 'localhost',
    user: 'root',
    password: '2724860101',
    database: 'test'
})



// connection.connect();
// connection.query('select * from user', function (error, result) {
//     if (error) throw error;
//     console.log(result[1]);
// })
// connection.end();

// 解析post请求体的方法
router.use(bodyParser.urlencoded({
    extended: true
}));
// 各种请求方式的接口
router.get('/', function (req, res) {
    // res.send('hello luoSir');
    var data = querystring.parse(parseUrl.parse(req.url).query);
    console.log(data);
    var username = data.username;
    encrypt(data.password).then(function (par) {
        var password = par;
        console.log(username, password);
        var sql1 = `insert into user(username,password) values ("${username}" , "${password}")`;
        var sql2 = `select username from user where username="${username}"`;
        sqlQuery(sql2, function (result) {
            console.log(result);
            if (result.length) {
                res.send(JSON.stringify({
                    prompt: '此用户名已注册！',
                    sign: 0
                }));
            } else {
                sqlQuery(sql1, function (result2) {
                    console.log(result2);
                    if (result2.affectedRows) {
                        res.send(JSON.stringify({
                            prompt: '恭喜，注册成功！',
                            sign: 1
                        }));
                    }
                })
            }
        })
    })

})
router.post('/', function (req, res) {
    var username = req.body.username;
    var password = req.body.password;
    var sql = `select username,password from user where username="${username}"`;
    // console.log(sql);
    sqlQuery(sql, function (data) {
        if (data.length) {
            console.log(password, data[0].password);
            compare(password, data[0].password).then(result => {
                console.log(result);
                if (result) {
                    res.send(JSON.stringify(data));
                } else {
                    res.send(JSON.stringify('密码错误！'));
                }
            })
        } else {
            res.send(JSON.stringify('该用户名未注册！'));
        }
    })
})
router.put('/', function (req, res) {
    res.send('这是put请求');
})
router.delete('/', function (req, res) {
    res.send('这是delete请求');
})
router.patch('/', function (req, res) {
    res.send('这是patch请求')
})
router.copy('/', function (req, res) {
    res.send('这是copy请求')
})

// 暴露router对象
module.exports = router;

// function sqlQuery(sql, callback) {
//     connection.query(sql, function (err, data) {
//         if (err) throw err;
//         callback(data);
//     });
// }

function sqlQuery(sql, callback) {
    // pool.query(sql, function (err, data) {
    //     if (err) throw err;
    //     callback(data);
    // });
    pool.getConnection(function (error, conn) {
        if (error) {
            console.log('数据库连接失败');
            return;
        }
        conn.query(sql, function (err, data) {
            if (err) throw err;
            callback(data);
        })
        // 释放连接
        // pool.releaseConnection(conn);
        conn.release();
    })
}

// 加密方法
async function encrypt(param1) {
    // 加盐
    let salt = await bcrypt.genSalt(10);
    // 加密
    let pass1 = await bcrypt.hash(param1, salt);
    // let pass2 = await bcrypt.hash(param2, salt);
    // console.log(pass1, pass2);
    return pass1;
}
async function compare(par1, par2) {
    let res = await bcrypt.compare(par1, par2);
    return res;
}